﻿//#define _CRT_SECURE_NO_WARNINGS
//#include<iostream>
//using namespace std;
//
//class A
//{
//public:
//	A(int a)
//	{
//		_a = a;
//	}
//private:
//	int _a;
//};
//class Date
//{
//public:
//	Date(int x, int year = 1, int month = 1, int day = 1)
//		//初始化处定义
//		:_year(year)
//		,_month(month)
//		,_day(day)
//		,_n(1)//const声明的变量必须在初始化列表定义 
//		,_c(x)//引用声明的变量必须在初始化列表定义
//		,_d(1)
//	{ }
//private:
//	//声明
//	int _year;
//	int _month;
//	int _day;
//	A _d;
//	const int _n;
//	int& _c;
//};
//class Date
//{
//public:
//	Date(int year = 1, int month = 1, int day = 1)
//		:_year(year)
//		,_month(month)
//	{}
//private:
//	int _year = 1;
//	int _month = 1;
//	int _day = 1;
//};
//class B
//{
//public:
//	static int Get()
//	{
//		//b++;
//		return _a1;
//	}
//	int Ret()
//	{
//		int c = Get();
//		return _a1;
//	}
//private:
//	int b = 0;
//	static int _a1;
//};
//int B::_a1 = 1;
//int main()
//{
//	cout << B::Get() << endl;
//	return 0;
//}
#include<iostream>
using namespace std;
//class A
//{
//	friend int Func();
//public:	
//private:
//	int a;
//}; 
//class B
//{
//	friend int Func();
//public:
//private:
//	int a;
//};
//int Func()
//{ 
//	A aa;
//	B bb;
//	cout << aa.a << endl;
//}
//class B;
//class A
//{
//	friend class B;
//public:
//private:
//	int a;
//};
//class B
//{
//public:
//	int Func(const A& aa)
//	{
//		cout << aa.a << endl;
//		cout << b << endl;
//	}
//private:
//	int b;
//	
//};

//class B;
//class A
//{
//	friend class B;
//public:
//private:
//	int a1;
//	int a2;
//};
//class C;
//class B
//{
//	friend class C;
//public:
//private:
//	int b1;
//	int b2;
//};
//class C
//{
//public:
//	void Func()
//	{
//		A aa;
//		B bb;
//		cout << aa.a1 << endl;//友元类无法传递
//		cout << bb.b1 << endl;
//	}
//};
//class A
//{
//public:
//	class B//B默认就是A的友元
//	{
//	public:
//		void Func(const A& a)
//		{
//			cout << a.a1;
//		}
//	private:
//		int b1;
//	};
//	
//private:
//	int a1;
//};
//int main()
//{
//	A::B b;
//	A aa;
//	cout << sizeof(A) << endl;
//}
//class A
//{
//public:
//	A(int a = 0)
//		:_a1(a)
//	{ }
//
//	void Print()
//	{
//		cout << _a1;
//	}
//	A(const A& aa)
//	{
//		_a1 = aa._a1;
//	}
//	A(int a1,int a2)
//		:_a1(a1)
//		,_a2(a2)
//	{ }
//private:
//	int _a1;
//	int _a2;
//};
//class stack
//{
//public:
//	void Push(const A& aa);
//private:
//	A _arr[10];
//	int _top;
//
//};
//int main()
//{
//	//构造
//	A aa1(1);
//	aa1.Print();
//	//类型转换
//	A aa2 = 2;
//	aa2.Print();
//
//	//A& aa3 = 3;  不行
//	const A& aa3 = 3;
//
//	stack st;
//	//常规方法
//	A aa4(3);
//	st.Push(aa3);
//	//类型转换
//	st.Push(3);
//
//	//c++11实用
//	A aa5 = { 1,1 };
//	const A& aa6 = { 2,2 };
//	st.Push(aa5);
//	st.Push({ 2,2 });
//
//	return 0;
//}
class A
{
public:
	A(int a = 0)
		:_a(a)
	{
		cout << "A(int a)" << endl;
	}
	~A()
	{
		cout << "~A()" << endl;
	}
private:
	int _a;
};
class Solution {
public:
	int Sum_Solution(int n) {
		//...
		return n;
	}
};
int main()
{
	A aa1;
	//不能这么定义对象，因为编译器⽆法识别下⾯是⼀个函数声明，还是对象定义

	//A aa1();
	//但是我们可以这么定义匿名对象，匿名对象的特点不⽤取名字，

	// 但是他的⽣命周期只有这⼀⾏，我们可以看到下⼀⾏他就会⾃动调⽤析构函数

	A();
	A(1);
	A aa2(2);

	//匿名对象在这样场景下就很好⽤，当然还有⼀些其他使⽤场景，这个我们以后遇到了再说

	Solution().Sum_Solution(10);
	return 0;
}